/**
 * 
 */
package com.shine.icis.dao;

import java.util.List;

import com.shine.icis.dao.IBaseHibernateDAO;
import com.shine.icis.hbean.FlowDef;
import com.shine.icis.hbean.FlowIns;
import com.shine.icis.hbean.FlowNode;
import com.shine.icis.hbean.TaskIns;

/**
 * @author zsy
 *
 */
public interface IFlowDAO extends IBaseHibernateDAO {

	/**
	 * 通过Id查找任务实例
	 * @param id
	 * @return
	 */
	public TaskIns findTaskById(String id);
	
	/**
	 * 通过Id查找流程步骤
	 * @param id
	 * @return
	 */
	public FlowNode findFlowNodeById(String id);
	
	/**
	 * 通过Id查找流程实例
	 * @param id
	 * @return
	 */
	public FlowIns findFlowInsById(String id);
	
	/**
	 * 通过ID查找流程定义
	 * @param id
	 * @return
	 */
	public FlowDef findFlowDefById(String id);
	
	/**
	 * 删除流程步骤
	 * @param id
	 */
	public void deleteFlowNode(String id);
	
	/**
	 * 最得流程步骤下一个排序号
	 * @param nodeId
	 * @return
	 */
	public int findFlowNodeNextOrderCode(String flowId);
	
	/**
	 * 是否第一个步骤
	 * @param flowDefId
	 * @param currentNodeId
	 * @return
	 */
	public boolean testFirstNode(String flowDefId, String currentNodeId);
	
	/**
	 * 查找流程的上一个步骤节点
	 * @param flowDefId
	 * @param currentNodeId
	 * @return
	 */
	public FlowNode findPreviousNode(String flowDefId, String currentNodeId);
	
	/**
	 * 查找流程的下一个步骤节点
	 * @param flowDefId
	 * @param currentNodeId
	 * @return
	 */
	public FlowNode findNextNode(String flowDefId, String currentNodeId);
	
	
	/**
	 * 查找待办任务
	 * @param userId
	 * @param roleIds
	 * @return
	 */
	public List<TaskIns> findTasks(String userId, List<String> roleIds);
	
	/**
	 * 查找已结束的任务
	 * @param flowInsId
	 * @return
	 */
	public List<TaskIns> findEndTasks(String flowInsId);
	
}
